class Anagrafiche::PartnersController < DefaultController
  require_role self.parent_name.underscore
  record_select :search_on => [:ragione_sociale, :descrizione, :chiavi_ricerca], :order_by => 'ragione_sociale ASC', :full_text_search => true
  
  active_scaffold :partner do |config|
    config.label = Application.controller_label(self)
    list.sorting = {:ragione_sociale => 'ASC'}
    config.subform.columns = [:ragione_sociale]
    config.actions.add :config_list, :export#, :field_search

    # definizione colonne
    sede_legale = [ :indirizzo, :cap, :localita, :provincia, :nazione ]
    contatto_principale = [ :telefono, :fax, :mail, :sito_web ]
    dati_contabili = [ :partita_iva, :codice_fiscale, :iva_differita, 
      :metodo_pagamento, :coordinate_bancarie ]
    altri_dati = [ :partner_collegato, :indirizzi_aggiuntivi, :contatti ]
    columns = [ :tipi_partner, :ragione_sociale, :descrizione, :chiavi_ricerca ] + 
      sede_legale + contatto_principale + dati_contabili + altri_dati
    columns_list = [ :ragione_sociale, :tipi_partner, :descrizione, :indirizzo, :localita, :telefono, :fax, :mail ]

    # visualizzazione colonne
    config.columns = config.list.columns = columns
    config.show.columns = config.update.columns = config.create.columns = columns
    config.config_list.default_columns = columns_list
    config.search.columns.add :contatti, :indirizzi_aggiuntivi, :note

    # configurazione colonne
    [:descrizione, :chiavi_ricerca, :mail, :sito_web, :partner_collegato].each { |i|
      config.columns[i].inplace_edit = :ajax
    }
    config.columns[:nazione].form_ui = :country
    config.columns[:nazione].options[:priority] = "Italy"
    [:tipi_partner, :metodo_pagamento, :provincia].each { |i|
      config.columns[i].form_ui = :select
    }
    config.columns[:iva_differita].form_ui = :checkbox
    config.columns[:partner_collegato].form_ui = :record_select
    config.columns[:descrizione].options = SMALL_TEXTAREA
    config.columns[:provincia].options = {:options => IndirizzoAggiuntivo::PROVINCE_ITALIANE.sort.map(&:to_sym), :include_blank => as_(:_select_)}
    
    # subgroup
    config.create.columns.add_subgroup "Sede legale" do |group|
      group.add(sede_legale)
      group.collapsed = false
    end
    config.update.columns.add_subgroup "Sede legale" do |group|
      group.add(sede_legale)
      group.collapsed = false
    end
    config.create.columns.add_subgroup "Contatto principale" do |group|
      group.add(contatto_principale)
      group.collapsed = false
    end
    config.update.columns.add_subgroup "Contatto principale" do |group|
      group.add(contatto_principale)
      group.collapsed = false
    end
    config.create.columns.add_subgroup "Dati contabili" do |group|
      group.add(dati_contabili)
      group.collapsed = true
    end
    config.update.columns.add_subgroup "Dati contabili" do |group|
      group.add(dati_contabili)
      group.collapsed = true
    end
    config.create.columns.add_subgroup "Altri dati" do |group|
      group.add(altri_dati)
      group.collapsed = true
    end
    config.update.columns.add_subgroup "Altri dati" do |group|
      group.add(altri_dati)
      group.collapsed = true
    end
    
    # azioni
    config.columns[:tipi_partner].clear_link
    config.columns[:partner_collegato].clear_link
    config.columns[:indirizzo].set_link('nested', :parameters => {:associations => :indirizzi_aggiuntivi})
    config.columns[:telefono].set_link('nested', :parameters => {:associations => :contatti})
    config.columns[:ragione_sociale].set_link('dettagli', :inline => false, :popup => true)
    config.action_links.add "Note", :action => 'nested', :parameters => {:associations => :note}, :type => :member
    config.action_links.add "Allegati", :action => 'nested', :parameters => {:associations => :allegati}, :type => :member
    
    #ricerca
    config.columns[:indirizzi_aggiuntivi].search_sql = 'indirizzi_aggiuntivi.indirizzo'
    config.columns[:contatti].search_sql = 'contatti.name'
    config.columns[:note].search_sql = 'note.testo'
  end

  def dettagli
    @record = Partner.find(params[:id])
  end
  
  def clienti
    params[:filter] = 'clienti'
    active_scaffold_config.label = "Anagrafiche :: Clienti"
    index
  end

  def fornitori
    params[:filter] = 'fornitori'
    active_scaffold_config.label = "Anagrafiche :: Fornitori"
    index
  end

  def condomini
    params[:filter] = 'condomini'
    active_scaffold_config.label = "Anagrafiche :: Condomini"
    index
  end
  
  def amministratori
    params[:filter] = 'amministratori'
    active_scaffold_config.label = "Anagrafiche :: Amministratori"
    index
  end
  
  def assicurazioni
    params[:filter] = 'assicurazioni'
    active_scaffold_config.label = "Anagrafiche :: Assicurazioni"
    index
  end
  
  def banche
    params[:filter] = 'banche'
    active_scaffold_config.label = "Anagrafiche :: Banche"
    index
  end

  protected

  def set_conditions
    case params[:filter]
    when 'clienti'
      ["partners.id IN (select partner_id FROM tipi_partner_partners WHERE (tipi_partner_partners.tipo_partner_id = 1))"]
    when 'fornitori'
      ["partners.id IN (select partner_id FROM tipi_partner_partners WHERE (tipi_partner_partners.tipo_partner_id = 2))"]
    when 'condomini'
      ["partners.id IN (select partner_id FROM tipi_partner_partners WHERE (tipi_partner_partners.tipo_partner_id = 3))"]
    when 'amministratori'
      ["partners.id IN (select partner_id FROM tipi_partner_partners WHERE (tipi_partner_partners.tipo_partner_id = 4))"]
    when 'assicurazioni'
      ["partners.id IN (select partner_id FROM tipi_partner_partners WHERE (tipi_partner_partners.tipo_partner_id = 5))"]
    when 'banche'
      ["partners.id IN (select partner_id FROM tipi_partner_partners WHERE (tipi_partner_partners.tipo_partner_id = 6))"]
    else
      []
    end
  end
  
  def conditions_for_collection
    set_conditions
  end

  def record_select_conditions_from_controller
    set_conditions
  end 
end
